const formidable = require('formidable');
const path = require('path')
const fs = require('fs')
const stuModel = require('../models/students.model.js')



// 添加学员
const addStudents = (req, res, next) => {
  const form = formidable({
    // 配置上传路径
    uploadDir: path.resolve(__dirname, '..', 'uploads'),
    // 保留后缀
    keepExtensions: true,
    allowEmptyFiles: true
  });

  form.parse(req, (err, fields, files) => {
    if (err) {
      next(err);
      return;
    }
    if (!fields.username || !fields.age) {
      return next({
        message: '用户名和年龄必填！',
        statusCode: 400
      })
    }

    // 解构出新头像的名字
    let newFilename = files?.avatar?.newFilename || ''
    let avatarPath = ''
    if (newFilename) {
      avatarPath = path.join('./uploads', newFilename)
    }
    stuModel.addStu(fields.username, fields.age, avatarPath)
    res.status(201).json({ msg: '新增学员成功' })
  });
}

// 获取学员
const getStudents = (req, res) => {
  // 将map的值转换为数组
  let students = stuModel.getStu()
  res.status(200).json({
    data: students
  })
}

// 删除学员
const deleteStudent = (req, res, next) => {
  let id = +req.params.id
  // 判断id是否合法
  if (isNaN(id)) {
    return next({
      message: '学员id必须为数字',
      statusCode: 400
    })
  }
  // 判断id是否存在
  if (!stuModel.existStu(id)) {
    return next({
      message: '该id的学员不存在！',
      statusCode: 404
    })
  }

  // 获取学员当前的头像
  // let avatar = stuMap.get(id).avatar
  // 删除这个学员保存在服务器的头像

  // FIXME: 要修复图片被删的bug
  // fs.unlink(path.resolve(__dirname, '..', avatar), err => {
  //   if (err) return next(new Error('图片不见了'))
  //   console.log('图片删除成功');
  // })

  stuModel.delStu(id)
  res.status(200).json({
    msg: '删除成功'
  })
}

// 修改学员
const editStudent = (req, res, next) => {
  let id = +req.params.id
  const form = formidable({
    // 配置上传路径
    uploadDir: path.resolve(__dirname,'..', './uploads'),
    // 保留后缀
    keepExtensions: true
  });
  form.parse(req, (err, fields, files) => {
    if (err) {
      next(err);
      return;
    }
    // 获取上传的名字和年龄
    let newUsername = fields.username
    let newAge = fields.age
    // 获取上传的头像，没有修改的话就是一个字符串，如果修改了的话，就是一个文件对象
    let tempAvatar = fields.avatar || files.avatar
    let newAvatar = typeof tempAvatar === 'string' ? tempAvatar : path.join('./uploads', tempAvatar.newFilename)
    stuModel.editStu(id, newUsername, newAge, newAvatar)

    res.status(200).json({ msg: '修改学员信息成功' })
  });
}


module.exports = {
  addStudents,
  getStudents,
  deleteStudent,
  editStudent
}